import { defineStore } from 'pinia';

/**
 * 待办事项状态管理store
 * 使用Pinia进行状态管理，包含待办事项的增删改查和过滤功能
 */
export const useTodoStore = defineStore('todo', {
  // 启用持久化存储
  persist: {
    // 存储方式：localStorage
    storage: localStorage,
    // 存储的key
    key: 'todo-store',
    // 需要持久化的数据
    paths: ['todos', 'filter'],
  },

  // 定义状态
  state: () => ({
    // 待办事项列表
    todos: [],
    // 当前过滤条件：all(全部)、active(进行中)、completed(已完成)
    filter: 'all',
  }),

  // 计算属性
  getters: {
    /**
     * 根据当前过滤条件返回过滤后的待办事项列表
     * @param {Object} state - store的状态
     * @returns {Array} 过滤后的待办事项列表
     */
    filteredTodos: (state) => {
      switch (state.filter) {
        case 'active':
          return state.todos.filter((todo) => !todo.completed);
        case 'completed':
          return state.todos.filter((todo) => todo.completed);
        default:
          return state.todos;
      }
    },
  },

  // 操作方法
  actions: {
    /**
     * 添加新的待办事项
     * @param {string} title - 待办事项标题
     */
    addTodo(title) {
      this.todos.push({
        id: Date.now(), // 使用时间戳作为唯一ID
        title,
        completed: false, // 默认为未完成状态
      });
    },

    /**
     * 切换待办事项的完成状态
     * @param {number} id - 待办事项ID
     */
    toggleTodo(id) {
      const todo = this.todos.find((todo) => todo.id === id);
      if (todo) {
        todo.completed = !todo.completed;
      }
    },

    /**
     * 删除待办事项
     * @param {number} id - 待办事项ID
     */
    deleteTodo(id) {
      this.todos = this.todos.filter((todo) => todo.id !== id);
    },

    /**
     * 设置过滤条件
     * @param {string} filter - 过滤条件：all/active/completed
     */
    setFilter(filter) {
      this.filter = filter;
    },
  },
});
